<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 组合继承    组合继承 = 原型链继承+构造函数继承
    // 原型链  缺点  
    function Person(name,age){
        this.name = [name]
        this.age = age

    }
    // 组合继承 能继承父类原型上的方法
    Person.prototype.fn = function(){
        console.log(this.name);
    }

    function Son(name,age,sex){
       Person.call(this,name,age)
       this.sex = sex
    }
    Son.prototype = new Person()

    let s1 = new Son('张三',18,'男')
    let s2 = new Son('李四',19,'女')
    console.log(s1);
    console.log(s2);
    s1.fn()//张三
    s2.fn()//李四
    s1.name.push('哈哈')
    // 子类的 引用类型 不会互相影响 一个改变不会影响另一个
    console.log(s1.name);
    console.log(s2.name);


    // 总结： es6的calss类 用extends继承   构造函数继承     原型链继承   组合继承

</script>
</html>